看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给定pushed和popped两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入push和弹出pop操作序列的结果时,返回true;否则,返回false。
示例 1:
| 1 | 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] | 
示例 2:
| 1 | 输入: pushed = [1,2,3,4,5], popped = [4,3,5,1,2] | 
提示:
1 <= pushed.length <= 1000
0 <= pushed[i] <= 1000
pushed的所有元素 互不相同
popped.length == pushed.length
popped是pushed的一个排列
解题思路
- 首先我们需要理解栈的特点:先进后出,后进先出
- 遍历pushed数组,将遍历的项插入到新数组中
- 定义一个指针用于记录与popped比较到了什么位置
- 如果遍历过程中有遍历的项与popped的上述指针所在项相同,移除新数组尾项
- 将新数组从后往前与popped从指针所在位置往后进行比较
- 直到两个数组出现不同的项再去重复上面两步
- 如果新数组正好长度为0则说明满足题意
解题代码
| 1 | var validateStackSequences = function(pushed, popped) { | 
如有任何问题或建议,欢迎留言讨论!
